export default {
  // 为当前模块开启命名空间
    namespaced: true,
    
    state:()=>({
        // 购物车的数组，用来存储购物车中每个商品的信息对象
        // 每个商品的信息对象，都包含如下 6 个属性：
        // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
      cart:JSON.parse(uni.getStorageSync('cart') || '[]')
    }),
     // 模块的 mutations 方法
      mutations: {
        add2cart(state,goods){
          const cartResult = state.cart.find(x=>x.goods_id===goods.goods_id)
          if(!cartResult){
            state.cart.push(goods)
          }else{
            cartResult.goods_count++
          }
          // 通过 commit 方法，调用 m_cart 命名空间下的 saveToStorage 方法
          this.commit('m_cart/save2Storage')
        },
        save2Storage(state){
          uni.setStorageSync('cart',JSON.stringify(state.cart))
        },
        updateGoodsState(state,goods){
          const cartResult = state.cart.find(x=>x.goods_id===goods.goods_id)
          if(cartResult){
            cartResult.goods_state=goods.goods_state
            this.commit('m_cart/save2Storage')
          }
        },
        updateGoodsCount(state,goods){
          const countResult= state.cart.find(x=>x.goods_id===goods.goods_id)
          if(countResult){
            countResult.goods_count=goods.goods_count
            this.commit('m_cart/save2Storage')
          }
        },
        removeGoodsById(state,goods_id){
          state.cart=state.cart.filter(x=>x.goods_id !== goods_id)
          this.commit('m_cart/save2Storage')
        },
        updateAllGoodsState(state,newState){
          state.cart.map(x=>x.goods_state=newState)
          this.commit('m_cart/save2Storage')
        }
      },
    
      // 模块的 getters 属性
      getters: {
        //购物车商品总数量
        total(state){
          let c=0
          state.cart.forEach(x=>{
            c+=x.goods_count
          })
          return c
        },
        // 勾选的商品的总数量
        checkedCount(state){
            // 先使用 filter 方法，从购物车中过滤器已勾选的商品
            // 再使用 reduce 方法，将已勾选的商品总数量进行累加
            // reduce() 的返回值就是已勾选的商品的总数量
          return state.cart.filter(x=>x.goods_state).reduce((total,item)=>total+=item.goods_count,0)
        },
        checkedGoodsAmount(state){
          return state.cart.filter(x=>x.goods_state).reduce((total,item)=>total+=item.goods_count*item.goods_price,0)
        }
      },
}